無效的存取控管(Broken Access Control)」它是由 2013 年的兩項指標所合併的。
在「不安全的物件參考(Insecure Direct Object References)」中,攻擊者利用 Web 本身的檔案讀取功能,任意存取系統的某一個檔案或資料;手法類似於 Malicious File Execution,主要目標是竊取系統內的某些檔案。
此漏洞原因在於未對使用者輸入的參數值(此參數值為外部的物件,如檔案)進行驗證所造成的安全漏洞。
在實際上,開發者常被要求寫一種只要使用者輸入相關參數(如文字檔名或圖檔等相關物件)即自動顯示或執行的程式,而我們最直覺的想法便是直接將要顯示的檔名(需包含路徑資訊)當成參數傳進去就好,程式直接根據此參數進行開檔與顯示的動作即可。
假設有一個連結 http://xxx.xxx.xxx.xxx/show.php?file=xxx.txt
,程式在接到輸入參數值後,再根據傳進的輸入參數值,直接開檔顯示內容即可,But!!! 如果程式未對輸入的輸入參數進行任何的驗證(例如驗證該檔案只限於某個目錄才可顯示該檔案內容),就有可能出現惡意的使用者利用傳入 ../etc/passwd
類似的字串,其中 ..
為回到上一層,此輸入參數的意思指向 /etc/
目錄下的 passwd 檔案。倘若程式未對輸入參數進行控管與驗證,當輸入此類的檔名時,就可能將該檔案的內容顯示出來。
若網頁內容含有以下html語法:
<select name="language"><option value="EN">English</option></select>
程式讀取該html標籤資料的語法為:
require_once ($_REQUEST['language’]."lang.php");
此時若程式寫法沒有限制,允許攻擊者插入特殊字串『../../../../etc/passwd%00』在網址列中:
http://www.example.com/application?language=../../../../etc/passwd%00
使用此種方式則可存取Web系統內的passwd檔案。
透過字串比對,檢視參數資料是否有 ../
,但我們仍可用其他的方式來跳脫字元檢查,例如:%2e%2e%2f
等。
處理檔案或敏感性資料時,需嚴格進行監控及身份權限驗證
利用 index 之方式讀取檔案,取代直接讀取檔案名稱